Conversation
spajic
approved these changes
Sep 29, 2020
Collaborator
spajic
left a comment
There was a problem hiding this comment.
Отличные кейсы, чёткое описание, благодарю! 👍
|
|
||
| ## Introduction | ||
|
|
||
| Я работаю в компании igooods - доставка продуктов на дом. У нас монолит на Ruby on Rails, который вот уже несколько месяцев потихоньку растаскиваем. У нас уже вынесена пользовательская фронтовая часть в отдельный проект на ReactJS. В монолите у нас осталась API (для реакта и мобильных приложений iOS & Android), админка сделаная в Rails-way стиле, а также есть еще пара Rails Engines с API сборщика и курьера. |
Collaborator
There was a problem hiding this comment.
Кажется монолит, распиливаемый на сервисы - сейчас наиболее распространённое состояние проектов )
| ### Step 3. Using Ruby-prof | ||
|
|
||
| Далее я начал профилировать и искать самый жирный по CPU участок кода. И нашел его практически сразу, это оказался не сам поиск, но подготовка ответа на клиент. | ||
| Посмотрев поближе, что происходит в самом жирном методе, я увидел, что после группировки записей на каждую группировку следует запрос количества в Elastic. т.е. здесь мы имели классический N+1, только в elastic. |
Collaborator
There was a problem hiding this comment.
Получается не совсем по CPU жирный участок, а по wall-time, во время которого CPU на самом деле ещё и простаивает
Author
There was a problem hiding this comment.
Да, конечно же wall-time. Не то написал.
|
|
||
| ### Step 4.1 Elasticsearch to DataDog | ||
|
|
||
| При просмотре логов локально, я видел запросы в эластик, но в датадоге их небыло. Поэтому следующим моим пулреквестом стало подключение эластика к датадогу. Картина в датадоге по этому эндпоинту стала более очевидной - запросы в эластик отжирали кучу времени. Плюс я увидел запросы, которые мне не показывались в development логе - `index_name/count`. |
|
|
||
| ### Step 8. Waiting for deploy | ||
|
|
||
| В данный момент команда web уже сдалала свое дело, и мой последний PR с оптимизацией уедет в продакшн в ближайшем релизе. |
|
|
||
| И вот однажды после очередного падения, я решил залезть в тест и посмотреть, так ли нужен в нем эластик, т.к. судя по тесту было не понятно зачем он там. И в теле самого теста я никаких запросов в индекс не нашел. | ||
|
|
||
| ### Step 3. Holy shit!!! |
| Создал задачу на будущее об очистке артифактов после прогона тестов. | ||
|
|
||
| ### Step 5. Take Profit | ||
| Выложил пулреквест. Job с тестами теперь выполняется на CI за 4,5 - 5 минут. Нехилый профит как мне кажется. Заодно и уменьшили внезапные падения тестов из-за недоступности эластика. |
Collaborator
There was a problem hiding this comment.
Ну и если всё-таки прикрутить parallel_test уже будет 2 минуты, это будет прям другое ощущение от работы
| И мне удалось сделать так чтобы он на тех же данных работал 15 минут и жрал только 3,5 GB памяти (just memoization). | ||
|
|
||
| Здесь же, мне помогли профилировщики и мониторинг, и без них было совсем не очевидно по коду где именно главная точка роста. | ||
| В планах и дальше заниматься оптимизацией API и не только. Кайф от этого получал всегда :) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.